Unwinding is a technique in computer science by which a call stack may be traversed, for example, to find a handler that may deal with a specific exception. A call stack may have many functions pushed into the stack, each with a stack frame that may include local variables, parameters, and a return address for a caller function. In many instances, a handler may be defined in a function to handle specific exceptions.
When a handler is not present in one call frame, an unwinder may proceed to the next call frame. In order to unwind, many unwinding mechanisms use information outside of the call stack for unwinding. The information may be referred to as annotations that are generated as part of the compilation process. Such annotated code may be unwound by traversing the call stack using the annotations. Code that is not annotated is generally not unwindable, since the information used to unwind is not available. When a non-annotated stack frame is encountered, an unwinder may not be able to proceed.